/*
 * Copyright 2025 The JA-SIG Collaborative. All rights reserved.
 * distributed with this file and available online at
 */
package com.lap.auth.adapter.driven.web.header;

import com.lap.auth.application.header.HeaderAppService;
import com.lap.auth.application.header.command.CreateHeaderCmd;
import com.lap.auth.domain.header.Header;
import com.lap.framework.annotation.NotAuth;
import com.lap.watchdog.starter.annotation.RepeatSubmit;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * 提供列表头restful接口层:
 *
 * <ol>
 *   <li>业务规则，原则上不做任何业务逻辑处理，仅仅是技术入口
 *   <li>命名规则，语义上明确接口做什么，推荐使用 Restful 命名 + Verb风格方法名（适配Swagger、Spring）:
 *       <ul>
 *         <li>分页使用 getXXXPage
 *         <li>获取单个 getXXById
 *         <li>保存使用 createXX
 *         <li>更新使用 updateXX
 *         <li>删除使用 deleteXX
 *       </ul>
 * </ol>
 *
 * @author Shuisheng Lao(劳水生)
 * @version 0.0.1
 */
@Tag(name = "列表头管理", description = "提供列表头基本操作，查询等")
@RequiredArgsConstructor
@RestController
@RequestMapping("api/v1/headers")
public class HeaderController {

  private final HeaderAppService headerAppService;

  @Operation(summary = "获取列表头")
  @NotAuth
  @GetMapping
  public List<String> getHeaderByCode(String code) {
    Header header = headerAppService.queryHeadersByCode(code);
    return Optional.ofNullable(header)
        .map(item -> Arrays.stream(item.getContent().split(",")).toList())
        .orElse(Collections.emptyList());
  }

  @Operation(summary = "添加列表头")
  @NotAuth
  @RepeatSubmit
  @PostMapping
  public void createHeader(@RequestBody @Valid CreateHeaderCmd cmd) {
    headerAppService.createHeader(cmd);
  }
}
